The Randomised Evaluation of COVID-19 Therapy (RECOVERY) is a platform trial that tested several treatments for COVID-19 since the beginning of the pandemics in 2020. Preliminary results on the anti-inflammatory drug tocilizumab were published on medRxiv on February 11, 2021
This was a large, open-label randomized controlled trial that assessed 28-day mortality as the primary outcome in hospitalized patients with COVID-19 using a frequentist statistical approach. Compared to the control group, there was a reduction in overall mortality in the tocilizumab group (rate ratio of 0.86; 95% confidence interval 0.77-0.96).
Though this was a well-powered trial for the overall primary outcome, subgroup analyses were not conclusive. Here, we will focus on subgroups based on respiratory support and days since symptom onset.
Because subgroup analysis of the primary outcome (mortality) were not conclusive, we decided to also include other outcomes reported by the authors: discharge from hospital within 28 days and risk of invasive mechanical ventilation/death
Adapted from the RECOVERY trial: Effect of allocation to tocilizumab on 28−day mortality by baseline characteristics
Patients allocated to tocilizumab were more likely to be discharged from hospital alive within 28 days (rate ratio 1.22; 95% CI 1.12-1.34).
Adapted from the RECOVERY trial: Effect of allocation to tocilizumab on hospital discharge by baseline characteristics
Among those not receiving invasive mechanical ventilation at baseline, patients allocated tocilizumab were less likely to reach the composite endpoint of invasive mechanical ventilation or death (risk ratio 0.85; 95% CI 0.78-0.93).
Adapted from the RECOVERY trial: Effect of allocation to tocilizumab on invasive mechanical ventilation or death in those not on invasive mechanical ventilation at randomisation, by baseline characteristics
In this project, we will reanalyze this trial through Bayesian methods.
The Bayesian statistical framework relies on defining priors. Then, these, in combination with new data (likelihood), generate posterior probabilities. Classically, researchers define the parameters of their priors before extracting the data.
In contrast, we will do a post hoc reanalysis of a published article. Therefore, this will be an exploratory analysis.
Tocilizumab is an anti-inflammatory drug commonly used in patients with rheumatoid arthritis. It is a monoclonal antibody to the receptor for IL-6, a pro-inflammatory cytokine.
COVID-19 is a disease caused by the virus SARS-CoV2. It has been postulated that the severity of disease is closely related to the degree of inflammation. Thus, there have been trials testing anti-inflammatory drugs for patients with COVID-19.
Corticosteroid is one of the drug classes that decreases mortality in patients with COVID-19. One of the most notable trials that has shown this effect was the one by the RECOVERY group on dexamethasone.
Thus, we have decided to define the parameters of our priors based on the biological plausibility of anti-inflammatory drugs, such as dexamethasone, for COVID-19. We also used the guidelines proposed by Zampieri et al. 2020 to decide our priors beliefs and belief strengths.
A total of 2104 patients were assigned to receive dexamethasone and 4321 to receive usual care. The primary outcome was 28-days mortality. Overall, the pooled age-adjusted rate ratio was 0.83 (95% confidence interval, 0.75 to 0.93). Next, we will discuss about a few pre-specified subgroup analyses of this trial.
Interestingly, when analyzing by respiratory support subgroups, there is a clear differential effect of dexamethasone on mortality. Patients on invasive mechanical ventilation benefit the most, while patients not on oxygen tends to get harmed by the therapy.
Adapted from the RECOVERY trial: Effect of dexamethasone on 28-day mortality, according to respiratory support at randomization
The time point in which patients start the treatment also plays a key role in the effectiveness of this drug. There were less deaths in patients treated before ≤7 days since symptom onset.
Adapted from the RECOVERY trial: Effect of allocation to dexamethasone on 28−day mortality by other pre−specified baseline characteristics
Adapted from the RECOVERY trial: Effect of allocation to dexamethasone on discharge from hospital alive within 28 days by other pre−specified baseline characteristics
Adapted from the RECOVERY trial: Effect of allocation to dexamethasone on invasive mechanical ventilation or death in those not on invasive mechanical ventilation at randomisation, by baseline characteristics
In light of the data from the dexamethasone trial, we decided on the priors beliefs and belief strengths for each subgroup per outcome in the tocilizumab trial.
Next, we will discuss about our priors for each of the outcomes in the tocilizumab trial:
28-days mortality
Discharge from hospital within 28 days
Invasive mechanical ventilation (IMV) or death in patients not receiving IMV at baseline
In regards to respiratory support subgroups, it is important note that they are different between the dexamethasone and tocilizumab trial. There isn’t a no oxygen received subgroup in the tocilizumab trial. Lastly, the oxygen only subgroup in the dexamethasone trial matches the inclusion criteria of both no ventilator support and non-invasive ventilation subgroups in the tocilizumab trial.
Thus, we ignored the no oxygen received subgroup data and interpreted the oxygen only as analog to both tocilizumab subgroups mentioned above.
Based on Zampieri et al. 2020, we decided to choose four different prior beliefs for each subgroup:
Non-informative (uniform)
Skeptical
Optimistic
Pessimistic
The non-informative prior is the same for all subgroups in every outcome. Thus, we will not report any analysis of this prior in this file.
For each prior, we will report the absolute risk reduction (ARR) of tocilizumab minus control group. Thus, for the mortality outcome, an ARR smaller than zero means tocilizumab is better.
There are three subgroups:
No ventilator support
Non-invasive ventilation
Invasive mechanical ventilation
We have decided that the parameters of priors should be the same for all three subgroups.
#Skeptical prior parameters
mean_skeptical_prior = 0 # Prior ARR mean
sd_skeptical_prior = 0.051 # Prior SD
sum = round((1-pnorm(0.1,mean_skeptical_prior,sd_skeptical_prior)) +
pnorm(-0.1,mean_skeptical_prior,sd_skeptical_prior),2)
skeptical_text = paste0(" Pr(> 0.1 & < -0.1) = ", sum)
# Check if output matches target_prob
#skeptical_text#Optimistic prior parameters
prob_harm_optimistic = T # Set TRUE to calculate Pr(ARR > 0) / Set FALSE to calculate Pr(ARR < 0)
mean_optimistic_prior = -0.05 # Prior ARR mean
target_prob = 0.15 # Probability chose accordingly to belief strength (weak, moderate or strong) / Check Zampieri et al. 2020
sd_optimistic_prior = abs(mean_optimistic_prior/qnorm(target_prob)) # Prior SD
optimistic_text = ifelse(prob_harm_optimistic,
paste0(" Pr(> 0) = ", round((1 - pnorm(0,mean_optimistic_prior,sd_optimistic_prior)), 2)),
paste0(" Pr(< 0) = ", round((pnorm(0,mean_optimistic_prior,sd_optimistic_prior)), 2)))
# Check if output matches target_prob
#optimistic_text#Pessimistic prior parameters
prob_harm_pessimistic = F # Set TRUE to calculate Pr(ARR > 0) / Set FALSE to calculate Pr(ARR < 0)
mean_pessimistic_prior = 0.05 # Prior ARR mean
target_prob = 0.30 # Probability chose accordingly to belief strength (weak, moderate or strong) / Check Zampieri et al. 2020
sd_pessimistic_prior = abs(mean_pessimistic_prior/qnorm(target_prob)) # Prior SD
pessimistic_text = ifelse(prob_harm_pessimistic,
paste0(" Pr(> 0) = ", round((1 - pnorm(0,mean_pessimistic_prior,sd_pessimistic_prior)), 2)),
paste0(" Pr(< 0) = ", round((pnorm(0,mean_pessimistic_prior,sd_pessimistic_prior)), 2)))
# Check if output matches target_prob
#pessimistic_textpriors = tibble(
"Prior Belief" = c("Skeptical",
"Optimistic",
"Pessimistic"),
"Assumed Mean ARR"= c(mean_skeptical_prior,
mean_optimistic_prior,
mean_pessimistic_prior),
"Belief Strength" = c("Moderate",
"Moderate",
"Weak"),
"Assumed SD of ARR" = c(round(sd_skeptical_prior, 2),
round(sd_optimistic_prior, 2),
round(sd_pessimistic_prior,2)),
"Pr(< 0)" = c(pnorm(0,mean_skeptical_prior,sd_skeptical_prior),
pnorm(0,mean_optimistic_prior,sd_optimistic_prior),
pnorm(0,mean_pessimistic_prior,sd_pessimistic_prior)),
"Pr(< -0.05)" = c(round(pnorm(-0.05,mean_skeptical_prior,sd_skeptical_prior),2),
round(pnorm(-0.05,mean_optimistic_prior,sd_optimistic_prior),2),
round(pnorm(-0.05,mean_pessimistic_prior,sd_pessimistic_prior,2))),
"Pr(< -0.10)" = c(round(pnorm(-0.1,mean_skeptical_prior,sd_skeptical_prior),2),
round(pnorm(-0.1,mean_optimistic_prior,sd_optimistic_prior),2),
round(pnorm(-0.1,mean_pessimistic_prior,sd_pessimistic_prior,2)))
)
priors %>%
kbl(align = 'c') %>%
add_header_above(c(" " = 4, "Probability of Treatment Effect" = 3)) %>%
kable_styling(bootstrap_options = "striped", full_width = F)| Prior Belief | Assumed Mean ARR | Belief Strength | Assumed SD of ARR | Pr(< 0) | Pr(< -0.05) | Pr(< -0.10) |
|---|---|---|---|---|---|---|
| Skeptical | 0.00 | Moderate | 0.05 | 0.50 | 0.16 | 0.02 |
| Optimistic | -0.05 | Moderate | 0.05 | 0.85 | 0.50 | 0.15 |
| Pessimistic | 0.05 | Weak | 0.10 | 0.30 | 0.00 | 0.00 |
There are two subgroups:
In this case, the parameters of priors will be different for each subgroup, as follows:
#Skeptical prior parameters
mean_skeptical_prior = 0 # Prior ARR mean
sd_skeptical_prior = 0.0383 # Prior SD
sum = round((1-pnorm(0.075,mean_skeptical_prior,sd_skeptical_prior)) +
pnorm(-0.075,mean_skeptical_prior,sd_skeptical_prior),2)
skeptical_text = paste0(" Pr(> 0.075 & < -0.075) = ", sum)
# Check if output matches target_prob
#skeptical_text#Optimistic prior parameters
prob_harm_optimistic = T # Set TRUE to calculate Pr(ARR > 0) / Set FALSE to calculate Pr(ARR < 0)
mean_optimistic_prior = -0.05 # Prior ARR mean
target_prob = 0.30 # Probability chose accordingly to belief strength (weak, moderate or strong) / Check Zampieri et al. 2020
sd_optimistic_prior = abs(mean_optimistic_prior/qnorm(target_prob)) # Prior SD
optimistic_text = ifelse(prob_harm_optimistic,
paste0(" Pr(> 0) = ", round((1 - pnorm(0,mean_optimistic_prior,sd_optimistic_prior)), 2)),
paste0(" Pr(< 0) = ", round((pnorm(0,mean_optimistic_prior,sd_optimistic_prior)), 2)))
# Check if output matches target_prob
#optimistic_text#Pessimistic prior parameters
prob_harm_pessimistic = F # Set TRUE to calculate Pr(ARR > 0) / Set FALSE to calculate Pr(ARR < 0)
mean_pessimistic_prior = 0.05 # Prior ARR mean
target_prob = 0.30 # Probability chose accordingly to belief strength (weak, moderate or strong) / Check Zampieri et al. 2020
sd_pessimistic_prior = abs(mean_pessimistic_prior/qnorm(target_prob)) # Prior SD
pessimistic_text = ifelse(prob_harm_pessimistic,
paste0(" Pr(> 0) = ", round((1 - pnorm(0,mean_pessimistic_prior,sd_pessimistic_prior)), 2)),
paste0(" Pr(< 0) = ", round((pnorm(0,mean_pessimistic_prior,sd_pessimistic_prior)), 2)))
# Check if output matches target_prob
#pessimistic_textpriors = tibble(
"Prior Belief" = c("Skeptical",
"Optimistic",
"Pessimistic"),
"Assumed Mean ARR"= c(mean_skeptical_prior,
mean_optimistic_prior,
mean_pessimistic_prior),
"Belief Strength" = c("Moderate",
"Weak",
"Weak"),
"Assumed SD of ARR" = c(round(sd_skeptical_prior, 2),
round(sd_optimistic_prior, 2),
round(sd_pessimistic_prior,2)),
"Pr(< 0)" = c(round(pnorm(0,mean_skeptical_prior,sd_skeptical_prior),2),
round(pnorm(0,mean_optimistic_prior,sd_optimistic_prior),2),
round(pnorm(0,mean_pessimistic_prior,sd_pessimistic_prior),2)),
"Pr(< -0.05)" = c(round(pnorm(-0.05,mean_skeptical_prior,sd_skeptical_prior),2),
round(pnorm(-0.05,mean_optimistic_prior,sd_optimistic_prior),2),
round(pnorm(-0.05,mean_pessimistic_prior,sd_pessimistic_prior),2)),
"Pr(< -0.10)" = c(round(pnorm(-0.1,mean_skeptical_prior,sd_skeptical_prior),2),
round(pnorm(-0.1,mean_optimistic_prior,sd_optimistic_prior),2),
round(pnorm(-0.1,mean_pessimistic_prior,sd_pessimistic_prior),2))
)
priors %>%
kbl(align = 'c') %>%
add_header_above(c(" " = 4, "Probability of Treatment Effect" = 3)) %>%
kable_styling(bootstrap_options = "striped", full_width = F)| Prior Belief | Assumed Mean ARR | Belief Strength | Assumed SD of ARR | Pr(< 0) | Pr(< -0.05) | Pr(< -0.10) |
|---|---|---|---|---|---|---|
| Skeptical | 0.00 | Moderate | 0.04 | 0.5 | 0.10 | 0.00 |
| Optimistic | -0.05 | Weak | 0.10 | 0.7 | 0.50 | 0.30 |
| Pessimistic | 0.05 | Weak | 0.10 | 0.3 | 0.15 | 0.06 |
#Skeptical prior parameters
mean_skeptical_prior = 0 # Prior ARR mean
sd_skeptical_prior = 0.051 # Prior SD
sum = round((1-pnorm(0.1,mean_skeptical_prior,sd_skeptical_prior)) +
pnorm(-0.1,mean_skeptical_prior,sd_skeptical_prior),2)
skeptical_text = paste0(" Pr(> 0.1 & < -0.1) = ", sum)
# Check if output matches target_prob
#skeptical_text#Optimistic prior parameters
prob_harm_optimistic = T # Set TRUE to calculate Pr(ARR > 0) / Set FALSE to calculate Pr(ARR < 0)
mean_optimistic_prior = -0.05 # Prior ARR mean
target_prob = 0.15 # Probability chose accordingly to belief strength (weak, moderate or strong) / Check Zampieri et al. 2020
sd_optimistic_prior = abs(mean_optimistic_prior/qnorm(target_prob)) # Prior SD
optimistic_text = ifelse(prob_harm_optimistic,
paste0(" Pr(> 0) = ", round((1 - pnorm(0,mean_optimistic_prior,sd_optimistic_prior)), 2)),
paste0(" Pr(< 0) = ", round((pnorm(0,mean_optimistic_prior,sd_optimistic_prior)), 2)))
# Check if output matches target_prob
#optimistic_text#Pessimistic prior parameters
prob_harm_pessimistic = F # Set TRUE to calculate Pr(ARR > 0) / Set FALSE to calculate Pr(ARR < 0)
mean_pessimistic_prior = 0.05 # Prior ARR mean
target_prob = 0.30 # Probability chose accordingly to belief strength (weak, moderate or strong) / Check Zampieri et al. 2020
sd_pessimistic_prior = abs(mean_pessimistic_prior/qnorm(target_prob)) # Prior SD
pessimistic_text = ifelse(prob_harm_pessimistic,
paste0(" Pr(> 0) = ", round((1 - pnorm(0,mean_pessimistic_prior,sd_pessimistic_prior)), 2)),
paste0(" Pr(< 0) = ", round((pnorm(0,mean_pessimistic_prior,sd_pessimistic_prior)), 2)))
# Check if output matches target_prob
#pessimistic_textpriors = tibble(
"Prior Belief" = c("Skeptical",
"Optimistic",
"Pessimistic"),
"Assumed Mean ARR"= c(mean_skeptical_prior,
mean_optimistic_prior,
mean_pessimistic_prior),
"Belief Strength" = c("Moderate",
"Moderate",
"Weak"),
"Assumed SD of ARR" = c(round(sd_skeptical_prior, 2),
round(sd_optimistic_prior, 2),
round(sd_pessimistic_prior,2)),
"Pr(< 0)" = c(round(pnorm(0,mean_skeptical_prior,sd_skeptical_prior),2),
round(pnorm(0,mean_optimistic_prior,sd_optimistic_prior),2),
round(pnorm(0,mean_pessimistic_prior,sd_pessimistic_prior),2)),
"Pr(< -0.05)" = c(round(pnorm(-0.05,mean_skeptical_prior,sd_skeptical_prior),2),
round(pnorm(-0.05,mean_optimistic_prior,sd_optimistic_prior),2),
round(pnorm(-0.05,mean_pessimistic_prior,sd_pessimistic_prior,2))),
"Pr(< -0.10)" = c(round(pnorm(-0.1,mean_skeptical_prior,sd_skeptical_prior),2),
round(pnorm(-0.1,mean_optimistic_prior,sd_optimistic_prior),2),
round(pnorm(-0.1,mean_pessimistic_prior,sd_pessimistic_prior),2))
)
priors %>%
kbl(align = 'c') %>%
add_header_above(c(" " = 4, "Probability of Treatment Effect" = 3)) %>%
kable_styling(bootstrap_options = "striped", full_width = F)| Prior Belief | Assumed Mean ARR | Belief Strength | Assumed SD of ARR | Pr(< 0) | Pr(< -0.05) | Pr(< -0.10) |
|---|---|---|---|---|---|---|
| Skeptical | 0.00 | Moderate | 0.05 | 0.50 | 0.16 | 0.02 |
| Optimistic | -0.05 | Moderate | 0.05 | 0.85 | 0.50 | 0.15 |
| Pessimistic | 0.05 | Weak | 0.10 | 0.30 | 0.00 | 0.06 |
Now, we will discuss the priors for the outcome of discharge from hospital within 28 days. Again, we will use the results from the dexamethasone trial as a reference for the parameters of prior beliefs and belief strengths.
We decided that the priors should match the ones we used for these subgroups in regards to the mortality outcome, except for the invasive mechanical ventilation group. Of note, for the discharge from hospital outcome, an absolute risk difference (ARD) greater than 0 means tocilizumab is better.
#Skeptical prior parameters
mean_skeptical_prior = 0 # Prior ARR mean
sd_skeptical_prior = 0.051 # Prior SD
sum = round((1-pnorm(0.1,mean_skeptical_prior,sd_skeptical_prior)) +
pnorm(-0.1,mean_skeptical_prior,sd_skeptical_prior),2)
skeptical_text = paste0(" Pr(> 0.1 & < -0.1) = ", sum)
# Check if output matches target_prob
#skeptical_text#Optimistic prior parameters
prob_harm_optimistic = F # Set TRUE to calculate Pr(ARR > 0) / Set FALSE to calculate Pr(ARR < 0)
mean_optimistic_prior = 0.05 # Prior ARR mean
target_prob = 0.15 # Probability chose accordingly to belief strength (weak, moderate or strong) / Check Zampieri et al. 2020
sd_optimistic_prior = abs(mean_optimistic_prior/qnorm(target_prob)) # Prior SD
optimistic_text = ifelse(prob_harm_optimistic,
paste0(" Pr(> 0) = ", round((1 - pnorm(0,mean_optimistic_prior,sd_optimistic_prior)), 2)),
paste0(" Pr(< 0) = ", round((pnorm(0,mean_optimistic_prior,sd_optimistic_prior)), 2)))
# Check if output matches target_prob
#optimistic_text#Pessimistic prior parameters
prob_harm_pessimistic = T # Set TRUE to calculate Pr(ARR > 0) / Set FALSE to calculate Pr(ARR < 0)
mean_pessimistic_prior = -0.05 # Prior ARR mean
target_prob = 0.30 # Probability chose accordingly to belief strength (weak, moderate or strong) / Check Zampieri et al. 2020
sd_pessimistic_prior = abs(mean_pessimistic_prior/qnorm(target_prob)) # Prior SD
pessimistic_text = ifelse(prob_harm_pessimistic,
paste0(" Pr(> 0) = ", round((1 - pnorm(0,mean_pessimistic_prior,sd_pessimistic_prior)), 2)),
paste0(" Pr(< 0) = ", round((pnorm(0,mean_pessimistic_prior,sd_pessimistic_prior)), 2)))
# Check if output matches target_prob
#pessimistic_textpriors = tibble(
"Prior Belief" = c("Skeptical",
"Optimistic",
"Pessimistic"),
"Assumed Mean ARD"= c(mean_skeptical_prior,
mean_optimistic_prior,
mean_pessimistic_prior),
"Belief Strength" = c("Moderate",
"Moderate",
"Weak"),
"Assumed SD of ARD" = c(round(sd_skeptical_prior, 2),
round(sd_optimistic_prior, 2),
round(sd_pessimistic_prior,2)),
"Pr(> 0)" = c((1 - pnorm(0,mean_skeptical_prior,sd_skeptical_prior)),
(1 - pnorm(0,mean_optimistic_prior,sd_optimistic_prior)),
(1 - pnorm(0,mean_pessimistic_prior,sd_pessimistic_prior))),
"Pr(> 0.05)" = c(round(1 - pnorm(0.05,mean_skeptical_prior,sd_skeptical_prior),2),
round(1 - pnorm(0.05,mean_optimistic_prior,sd_optimistic_prior),2),
round(1 - pnorm(0.05,mean_pessimistic_prior,sd_pessimistic_prior),2)),
"Pr(> 0.10)" = c(round(1 - pnorm(0.1,mean_skeptical_prior,sd_skeptical_prior),2),
round(1 - pnorm(0.1,mean_optimistic_prior,sd_optimistic_prior),2),
round(1 - pnorm(0.1,mean_pessimistic_prior,sd_pessimistic_prior),2))
)
priors %>%
kbl(align = 'c') %>%
add_header_above(c(" " = 4, "Probability of Treatment Effect" = 3)) %>%
kable_styling(bootstrap_options = "striped", full_width = F)| Prior Belief | Assumed Mean ARD | Belief Strength | Assumed SD of ARD | Pr(> 0) | Pr(> 0.05) | Pr(> 0.10) |
|---|---|---|---|---|---|---|
| Skeptical | 0.00 | Moderate | 0.05 | 0.50 | 0.16 | 0.02 |
| Optimistic | 0.05 | Moderate | 0.05 | 0.85 | 0.50 | 0.15 |
| Pessimistic | -0.05 | Weak | 0.10 | 0.30 | 0.15 | 0.06 |
#Skeptical prior parameters
mean_skeptical_prior = 0 # Prior ARR mean
sd_skeptical_prior = 0.051 # Prior SD
sum = round((1-pnorm(0.1,mean_skeptical_prior,sd_skeptical_prior)) +
pnorm(-0.1,mean_skeptical_prior,sd_skeptical_prior),2)
skeptical_text = paste0(" Pr(> 0.1 & < -0.1) = ", sum)
# Check if output matches target_prob
#skeptical_text#Optimistic prior parameters
prob_harm_optimistic = F # Set TRUE to calculate Pr(ARR > 0) / Set FALSE to calculate Pr(ARR < 0)
mean_optimistic_prior = 0.05 # Prior ARR mean
target_prob = 0.30 # Probability chose accordingly to belief strength (weak, moderate or strong) / Check Zampieri et al. 2020
sd_optimistic_prior = abs(mean_optimistic_prior/qnorm(target_prob)) # Prior SD
optimistic_text = ifelse(prob_harm_optimistic,
paste0(" Pr(> 0) = ", round((1 - pnorm(0,mean_optimistic_prior,sd_optimistic_prior)), 2)),
paste0(" Pr(< 0) = ", round((pnorm(0,mean_optimistic_prior,sd_optimistic_prior)), 2)))
# Check if output matches target_prob
#optimistic_text#Pessimistic prior parameters
prob_harm_pessimistic = T # Set TRUE to calculate Pr(ARR > 0) / Set FALSE to calculate Pr(ARR < 0)
mean_pessimistic_prior = -0.05 # Prior ARR mean
target_prob = 0.30 # Probability chose accordingly to belief strength (weak, moderate or strong) / Check Zampieri et al. 2020
sd_pessimistic_prior = abs(mean_pessimistic_prior/qnorm(target_prob)) # Prior SD
pessimistic_text = ifelse(prob_harm_pessimistic,
paste0(" Pr(> 0) = ", round((1 - pnorm(0,mean_pessimistic_prior,sd_pessimistic_prior)), 2)),
paste0(" Pr(< 0) = ", round((pnorm(0,mean_pessimistic_prior,sd_pessimistic_prior)), 2)))
# Check if output matches target_prob
#pessimistic_textpriors = tibble(
"Prior Belief" = c("Skeptical",
"Optimistic",
"Pessimistic"),
"Assumed Mean ARD"= c(mean_skeptical_prior,
mean_optimistic_prior,
mean_pessimistic_prior),
"Belief Strength" = c("Moderate",
"Weak",
"Weak"),
"Assumed SD of ARD" = c(round(sd_skeptical_prior, 2),
round(sd_optimistic_prior, 2),
round(sd_pessimistic_prior,2)),
"Pr(> 0)" = c((1 - pnorm(0,mean_skeptical_prior,sd_skeptical_prior)),
(1 - pnorm(0,mean_optimistic_prior,sd_optimistic_prior)),
(1 - pnorm(0,mean_pessimistic_prior,sd_pessimistic_prior))),
"Pr(> 0.05)" = c(round(1 - pnorm(0.05,mean_skeptical_prior,sd_skeptical_prior),2),
round(1 - pnorm(0.05,mean_optimistic_prior,sd_optimistic_prior),2),
round(1 - pnorm(0.05,mean_pessimistic_prior,sd_pessimistic_prior),2)),
"Pr(> 0.10)" = c(round(1 - pnorm(0.1,mean_skeptical_prior,sd_skeptical_prior),2),
round(1 - pnorm(0.1,mean_optimistic_prior,sd_optimistic_prior),2),
round(1 - pnorm(0.1,mean_pessimistic_prior,sd_pessimistic_prior),2))
)
priors %>%
kbl(align = 'c') %>%
add_header_above(c(" " = 4, "Probability of Treatment Effect" = 3)) %>%
kable_styling(bootstrap_options = "striped", full_width = F)| Prior Belief | Assumed Mean ARD | Belief Strength | Assumed SD of ARD | Pr(> 0) | Pr(> 0.05) | Pr(> 0.10) |
|---|---|---|---|---|---|---|
| Skeptical | 0.00 | Moderate | 0.05 | 0.5 | 0.16 | 0.02 |
| Optimistic | 0.05 | Weak | 0.10 | 0.7 | 0.50 | 0.30 |
| Pessimistic | -0.05 | Weak | 0.10 | 0.3 | 0.15 | 0.06 |
The risk difference between the ≤ 7 days and > 7 days subgroup in the dexamethasone trial is small. Yet, we judged that the priors for the tocilizumab trial should be different in each subgroup.
#Skeptical prior parameters
mean_skeptical_prior = 0 # Prior ARR mean
sd_skeptical_prior = 0.051 # Prior SD
sum = round((1-pnorm(0.1,mean_skeptical_prior,sd_skeptical_prior)) +
pnorm(-0.1,mean_skeptical_prior,sd_skeptical_prior),2)
skeptical_text = paste0(" Pr(> 0.1 & < -0.1) = ", sum)
# Check if output matches target_prob
#skeptical_text#Optimistic prior parameters
prob_harm_optimistic = F # Set TRUE to calculate Pr(ARR > 0) / Set FALSE to calculate Pr(ARR < 0)
mean_optimistic_prior = 0.05 # Prior ARR mean
target_prob = 0.30 # Probability chose accordingly to belief strength (weak, moderate or strong) / Check Zampieri et al. 2020
sd_optimistic_prior = abs(mean_optimistic_prior/qnorm(target_prob)) # Prior SD
optimistic_text = ifelse(prob_harm_optimistic,
paste0(" Pr(> 0) = ", round((1 - pnorm(0,mean_optimistic_prior,sd_optimistic_prior)), 2)),
paste0(" Pr(< 0) = ", round((pnorm(0,mean_optimistic_prior,sd_optimistic_prior)), 2)))
# Check if output matches target_prob
#optimistic_text#Pessimistic prior parameters
prob_harm_pessimistic = T # Set TRUE to calculate Pr(ARR > 0) / Set FALSE to calculate Pr(ARR < 0)
mean_pessimistic_prior = -0.05 # Prior ARR mean
target_prob = 0.30 # Probability chose accordingly to belief strength (weak, moderate or strong) / Check Zampieri et al. 2020
sd_pessimistic_prior = abs(mean_pessimistic_prior/qnorm(target_prob)) # Prior SD
pessimistic_text = ifelse(prob_harm_pessimistic,
paste0(" Pr(> 0) = ", round((1 - pnorm(0,mean_pessimistic_prior,sd_pessimistic_prior)), 2)),
paste0(" Pr(< 0) = ", round((pnorm(0,mean_pessimistic_prior,sd_pessimistic_prior)), 2)))
# Check if output matches target_prob
#pessimistic_textpriors = tibble(
"Prior Belief" = c("Skeptical",
"Optimistic",
"Pessimistic"),
"Assumed Mean ARR"= c(mean_skeptical_prior,
mean_optimistic_prior,
mean_pessimistic_prior),
"Belief Strength" = c("Moderate",
"Weak",
"Weak"),
"Assumed SD of ARR" = c(round(sd_skeptical_prior, 2),
round(sd_optimistic_prior, 2),
round(sd_pessimistic_prior,2)),
"Pr(> 0)" = c((1 - pnorm(0,mean_skeptical_prior,sd_skeptical_prior)),
(1 - pnorm(0,mean_optimistic_prior,sd_optimistic_prior)),
(1 - pnorm(0,mean_pessimistic_prior,sd_pessimistic_prior))),
"Pr(> 0.05)" = c(round(1 - pnorm(0.05,mean_skeptical_prior,sd_skeptical_prior),2),
round(1 - pnorm(0.05,mean_optimistic_prior,sd_optimistic_prior),2),
round(1 - pnorm(0.05,mean_pessimistic_prior,sd_pessimistic_prior),2)),
"Pr(> 0.10)" = c(round(1 - pnorm(0.1,mean_skeptical_prior,sd_skeptical_prior),2),
round(1 - pnorm(0.1,mean_optimistic_prior,sd_optimistic_prior),2),
round(1 - pnorm(0.1,mean_pessimistic_prior,sd_pessimistic_prior),2))
)
priors %>%
kbl(align = 'c') %>%
add_header_above(c(" " = 4, "Probability of Treatment Effect" = 3)) %>%
kable_styling(bootstrap_options = "striped", full_width = F)| Prior Belief | Assumed Mean ARR | Belief Strength | Assumed SD of ARR | Pr(> 0) | Pr(> 0.05) | Pr(> 0.10) |
|---|---|---|---|---|---|---|
| Skeptical | 0.00 | Moderate | 0.05 | 0.5 | 0.16 | 0.02 |
| Optimistic | 0.05 | Weak | 0.10 | 0.7 | 0.50 | 0.30 |
| Pessimistic | -0.05 | Weak | 0.10 | 0.3 | 0.15 | 0.06 |
#Skeptical prior parameters
mean_skeptical_prior = 0 # Prior ARR mean
sd_skeptical_prior = 0.051 # Prior SD
sum = round((1-pnorm(0.1,mean_skeptical_prior,sd_skeptical_prior)) +
pnorm(-0.1,mean_skeptical_prior,sd_skeptical_prior),2)
skeptical_text = paste0(" Pr(> 0.1 & < -0.1) = ", sum)
# Check if output matches target_prob
#skeptical_text#Optimistic prior parameters
prob_harm_optimistic = F # Set TRUE to calculate Pr(ARR > 0) / Set FALSE to calculate Pr(ARR < 0)
mean_optimistic_prior = 0.05 # Prior ARR mean
target_prob = 0.15 # Probability chose accordingly to belief strength (weak, moderate or strong) / Check Zampieri et al. 2020
sd_optimistic_prior = abs(mean_optimistic_prior/qnorm(target_prob)) # Prior SD
optimistic_text = ifelse(prob_harm_optimistic,
paste0(" Pr(> 0) = ", round((1 - pnorm(0,mean_optimistic_prior,sd_optimistic_prior)), 2)),
paste0(" Pr(< 0) = ", round((pnorm(0,mean_optimistic_prior,sd_optimistic_prior)), 2)))
# Check if output matches target_prob
#optimistic_text#Pessimistic prior parameters
prob_harm_pessimistic = T # Set TRUE to calculate Pr(ARR > 0) / Set FALSE to calculate Pr(ARR < 0)
mean_pessimistic_prior = -0.05 # Prior ARR mean
target_prob = 0.30 # Probability chose accordingly to belief strength (weak, moderate or strong) / Check Zampieri et al. 2020
sd_pessimistic_prior = abs(mean_pessimistic_prior/qnorm(target_prob)) # Prior SD
pessimistic_text = ifelse(prob_harm_pessimistic,
paste0(" Pr(> 0) = ", round((1 - pnorm(0,mean_pessimistic_prior,sd_pessimistic_prior)), 2)),
paste0(" Pr(< 0) = ", round((pnorm(0,mean_pessimistic_prior,sd_pessimistic_prior)), 2)))
# Check if output matches target_prob
#pessimistic_textpriors = tibble(
"Prior Belief" = c("Skeptical",
"Optimistic",
"Pessimistic"),
"Assumed Mean ARR"= c(mean_skeptical_prior,
mean_optimistic_prior,
mean_pessimistic_prior),
"Belief Strength" = c("Moderate",
"Weak",
"Weak"),
"Assumed SD of ARR" = c(round(sd_skeptical_prior, 2),
round(sd_optimistic_prior, 2),
round(sd_pessimistic_prior,2)),
"Pr(> 0)" = c((1 - pnorm(0,mean_skeptical_prior,sd_skeptical_prior)),
(1 - pnorm(0,mean_optimistic_prior,sd_optimistic_prior)),
(1 - pnorm(0,mean_pessimistic_prior,sd_pessimistic_prior))),
"Pr(> 0.05)" = c(round(1 - pnorm(0.05,mean_skeptical_prior,sd_skeptical_prior),2),
round(1 - pnorm(0.05,mean_optimistic_prior,sd_optimistic_prior),2),
round(1 - pnorm(0.05,mean_pessimistic_prior,sd_pessimistic_prior),2)),
"Pr(> 0.10)" = c(round(1 - pnorm(0.1,mean_skeptical_prior,sd_skeptical_prior),2),
round(1 - pnorm(0.1,mean_optimistic_prior,sd_optimistic_prior),2),
round(1 - pnorm(0.1,mean_pessimistic_prior,sd_pessimistic_prior),2))
)
priors %>%
kbl(align = 'c') %>%
add_header_above(c(" " = 4, "Probability of Treatment Effect" = 3)) %>%
kable_styling(bootstrap_options = "striped", full_width = F)| Prior Belief | Assumed Mean ARR | Belief Strength | Assumed SD of ARR | Pr(> 0) | Pr(> 0.05) | Pr(> 0.10) |
|---|---|---|---|---|---|---|
| Skeptical | 0.00 | Moderate | 0.05 | 0.50 | 0.16 | 0.02 |
| Optimistic | 0.05 | Weak | 0.05 | 0.85 | 0.50 | 0.15 |
| Pessimistic | -0.05 | Weak | 0.10 | 0.30 | 0.15 | 0.06 |
Here, we will only consider data from the oxygen only subgroup of the dexamethasone trial since this is the only one that matches the tocilizumab trial. Of note, for this outcome, an ARR smaller than 0 means tocilizumab is better.
#Skeptical prior parameters
mean_skeptical_prior = 0 # Prior ARR mean
sd_skeptical_prior = 0.051 # Prior SD
sum = round((1-pnorm(0.1,mean_skeptical_prior,sd_skeptical_prior)) +
pnorm(-0.1,mean_skeptical_prior,sd_skeptical_prior),2)
skeptical_text = paste0(" Pr(> 0.1 & < -0.1) = ", sum)
# Check if output matches target_prob
#skeptical_text#Optimistic prior parameters
prob_harm_optimistic = T # Set TRUE to calculate Pr(ARR > 0) / Set FALSE to calculate Pr(ARR < 0)
mean_optimistic_prior = -0.05 # Prior ARR mean
target_prob = 0.15 # Probability chose accordingly to belief strength (weak, moderate or strong) / Check Zampieri et al. 2020
sd_optimistic_prior = abs(mean_optimistic_prior/qnorm(target_prob)) # Prior SD
optimistic_text = ifelse(prob_harm_optimistic,
paste0(" Pr(> 0) = ", round((1 - pnorm(0,mean_optimistic_prior,sd_optimistic_prior)), 2)),
paste0(" Pr(< 0) = ", round((pnorm(0,mean_optimistic_prior,sd_optimistic_prior)), 2)))
# Check if output matches target_prob
#optimistic_text#Pessimistic prior parameters
prob_harm_pessimistic = F # Set TRUE to calculate Pr(ARR > 0) / Set FALSE to calculate Pr(ARR < 0)
mean_pessimistic_prior = 0.05 # Prior ARR mean
target_prob = 0.30 # Probability chose accordingly to belief strength (weak, moderate or strong) / Check Zampieri et al. 2020
sd_pessimistic_prior = abs(mean_pessimistic_prior/qnorm(target_prob)) # Prior SD
pessimistic_text = ifelse(prob_harm_pessimistic,
paste0(" Pr(> 0) = ", round((1 - pnorm(0,mean_pessimistic_prior,sd_pessimistic_prior)), 2)),
paste0(" Pr(< 0) = ", round((pnorm(0,mean_pessimistic_prior,sd_pessimistic_prior)), 2)))
# Check if output matches target_prob
#pessimistic_textpriors = tibble(
"Prior Belief" = c("Skeptical",
"Optimistic",
"Pessimistic"),
"Assumed Mean ARR"= c(mean_skeptical_prior,
mean_optimistic_prior,
mean_pessimistic_prior),
"Belief Strength" = c("Moderate",
"Moderate",
"Weak"),
"Assumed SD of ARR" = c(round(sd_skeptical_prior, 2),
round(sd_optimistic_prior, 2),
round(sd_pessimistic_prior,2)),
"Pr(< 0)" = c(pnorm(0,mean_skeptical_prior,sd_skeptical_prior),
pnorm(0,mean_optimistic_prior,sd_optimistic_prior),
pnorm(0,mean_pessimistic_prior,sd_pessimistic_prior)),
"Pr(< -0.05)" = c(round(pnorm(-0.05,mean_skeptical_prior,sd_skeptical_prior),2),
round(pnorm(-0.05,mean_optimistic_prior,sd_optimistic_prior),2),
round(pnorm(-0.05,mean_pessimistic_prior,sd_pessimistic_prior,2))),
"Pr(< -0.10)" = c(round(pnorm(-0.1,mean_skeptical_prior,sd_skeptical_prior),2),
round(pnorm(-0.1,mean_optimistic_prior,sd_optimistic_prior),2),
round(pnorm(-0.1,mean_pessimistic_prior,sd_pessimistic_prior,2)))
)
priors %>%
kbl(align = 'c') %>%
add_header_above(c(" " = 4, "Probability of Treatment Effect" = 3)) %>%
kable_styling(bootstrap_options = "striped", full_width = F)| Prior Belief | Assumed Mean ARR | Belief Strength | Assumed SD of ARR | Pr(< 0) | Pr(< -0.05) | Pr(< -0.10) |
|---|---|---|---|---|---|---|
| Skeptical | 0.00 | Moderate | 0.05 | 0.50 | 0.16 | 0.02 |
| Optimistic | -0.05 | Moderate | 0.05 | 0.85 | 0.50 | 0.15 |
| Pessimistic | 0.05 | Weak | 0.10 | 0.30 | 0.00 | 0.00 |
For these subgroups, we judged it would be reasonable to choose different parameters of prios for each subgroup
#Skeptical prior parameters
mean_skeptical_prior = 0 # Prior ARR mean
sd_skeptical_prior = 0.0383 # Prior SD
sum = round((1-pnorm(0.075,mean_skeptical_prior,sd_skeptical_prior)) +
pnorm(-0.075,mean_skeptical_prior,sd_skeptical_prior),2)
skeptical_text = paste0(" Pr(> 0.075 & < -0.075) = ", sum)
# Check if output matches target_prob
#skeptical_text#Optimistic prior parameters
prob_harm_optimistic = T # Set TRUE to calculate Pr(ARR > 0) / Set FALSE to calculate Pr(ARR < 0)
mean_optimistic_prior = -0.05 # Prior ARR mean
target_prob = 0.30 # Probability chose accordingly to belief strength (weak, moderate or strong) / Check Zampieri et al. 2020
sd_optimistic_prior = abs(mean_optimistic_prior/qnorm(target_prob)) # Prior SD
optimistic_text = ifelse(prob_harm_optimistic,
paste0(" Pr(> 0) = ", round((1 - pnorm(0,mean_optimistic_prior,sd_optimistic_prior)), 2)),
paste0(" Pr(< 0) = ", round((pnorm(0,mean_optimistic_prior,sd_optimistic_prior)), 2)))
# Check if output matches target_prob
#optimistic_text#Pessimistic prior parameters
prob_harm_pessimistic = F # Set TRUE to calculate Pr(ARR > 0) / Set FALSE to calculate Pr(ARR < 0)
mean_pessimistic_prior = 0.05 # Prior ARR mean
target_prob = 0.15 # Probability chose accordingly to belief strength (weak, moderate or strong) / Check Zampieri et al. 2020
sd_pessimistic_prior = abs(mean_pessimistic_prior/qnorm(target_prob)) # Prior SD
pessimistic_text = ifelse(prob_harm_pessimistic,
paste0(" Pr(> 0) = ", round((1 - pnorm(0,mean_pessimistic_prior,sd_pessimistic_prior)), 2)),
paste0(" Pr(< 0) = ", round((pnorm(0,mean_pessimistic_prior,sd_pessimistic_prior)), 2)))
# Check if output matches target_prob
#pessimistic_textpriors = tibble(
"Prior Belief" = c("Skeptical",
"Optimistic",
"Pessimistic"),
"Assumed Mean ARR"= c(mean_skeptical_prior,
mean_optimistic_prior,
mean_pessimistic_prior),
"Belief Strength" = c("Strong",
"Weak",
"Moderate"),
"Assumed SD of ARR" = c(round(sd_skeptical_prior, 2),
round(sd_optimistic_prior, 2),
round(sd_pessimistic_prior,2)),
"Pr(< 0)" = c(round(pnorm(0,mean_skeptical_prior,sd_skeptical_prior),2),
round(pnorm(0,mean_optimistic_prior,sd_optimistic_prior),2),
round(pnorm(0,mean_pessimistic_prior,sd_pessimistic_prior),2)),
"Pr(< -0.05)" = c(round(pnorm(-0.05,mean_skeptical_prior,sd_skeptical_prior),2),
round(pnorm(-0.05,mean_optimistic_prior,sd_optimistic_prior),2),
round(pnorm(-0.05,mean_pessimistic_prior,sd_pessimistic_prior),2)),
"Pr(< -0.10)" = c(round(pnorm(-0.1,mean_skeptical_prior,sd_skeptical_prior),2),
round(pnorm(-0.1,mean_optimistic_prior,sd_optimistic_prior),2),
round(pnorm(-0.1,mean_pessimistic_prior,sd_pessimistic_prior),2))
)
priors %>%
kbl(align = 'c') %>%
add_header_above(c(" " = 4, "Probability of Treatment Effect" = 3)) %>%
kable_styling(bootstrap_options = "striped", full_width = F)| Prior Belief | Assumed Mean ARR | Belief Strength | Assumed SD of ARR | Pr(< 0) | Pr(< -0.05) | Pr(< -0.10) |
|---|---|---|---|---|---|---|
| Skeptical | 0.00 | Strong | 0.04 | 0.50 | 0.10 | 0.0 |
| Optimistic | -0.05 | Weak | 0.10 | 0.70 | 0.50 | 0.3 |
| Pessimistic | 0.05 | Moderate | 0.05 | 0.15 | 0.02 | 0.0 |
#Skeptical prior parameters
mean_skeptical_prior = 0 # Prior ARR mean
sd_skeptical_prior = 0.051 # Prior SD
sum = round((1-pnorm(0.1,mean_skeptical_prior,sd_skeptical_prior)) +
pnorm(-0.1,mean_skeptical_prior,sd_skeptical_prior),2)
skeptical_text = paste0(" Pr(> 0.1 & < -0.1) = ", sum)
# Check if output matches target_prob
#skeptical_text#Optimistic prior parameters
prob_harm_optimistic = T # Set TRUE to calculate Pr(ARR > 0) / Set FALSE to calculate Pr(ARR < 0)
mean_optimistic_prior = -0.05 # Prior ARR mean
target_prob = 0.15 # Probability chose accordingly to belief strength (weak, moderate or strong) / Check Zampieri et al. 2020
sd_optimistic_prior = abs(mean_optimistic_prior/qnorm(target_prob)) # Prior SD
optimistic_text = ifelse(prob_harm_optimistic,
paste0(" Pr(> 0) = ", round((1 - pnorm(0,mean_optimistic_prior,sd_optimistic_prior)), 2)),
paste0(" Pr(< 0) = ", round((pnorm(0,mean_optimistic_prior,sd_optimistic_prior)), 2)))
# Check if output matches target_prob
#optimistic_text#Pessimistic prior parameters
prob_harm_pessimistic = F # Set TRUE to calculate Pr(ARR > 0) / Set FALSE to calculate Pr(ARR < 0)
mean_pessimistic_prior = 0.05 # Prior ARR mean
target_prob = 0.30 # Probability chose accordingly to belief strength (weak, moderate or strong) / Check Zampieri et al. 2020
sd_pessimistic_prior = abs(mean_pessimistic_prior/qnorm(target_prob)) # Prior SD
pessimistic_text = ifelse(prob_harm_pessimistic,
paste0(" Pr(> 0) = ", round((1 - pnorm(0,mean_pessimistic_prior,sd_pessimistic_prior)), 2)),
paste0(" Pr(< 0) = ", round((pnorm(0,mean_pessimistic_prior,sd_pessimistic_prior)), 2)))
# Check if output matches target_prob
#pessimistic_textpriors = tibble(
"Prior Belief" = c("Skeptical",
"Optimistic",
"Pessimistic"),
"Assumed Mean ARR"= c(mean_skeptical_prior,
mean_optimistic_prior,
mean_pessimistic_prior),
"Belief Strength" = c("Moderate",
"Moderate",
"Weak"),
"Assumed SD of ARR" = c(round(sd_skeptical_prior, 2),
round(sd_optimistic_prior, 2),
round(sd_pessimistic_prior,2)),
"Pr(< 0)" = c(round(pnorm(0,mean_skeptical_prior,sd_skeptical_prior),2),
round(pnorm(0,mean_optimistic_prior,sd_optimistic_prior),2),
round(pnorm(0,mean_pessimistic_prior,sd_pessimistic_prior),2)),
"Pr(< -0.05)" = c(round(pnorm(-0.05,mean_skeptical_prior,sd_skeptical_prior),2),
round(pnorm(-0.05,mean_optimistic_prior,sd_optimistic_prior),2),
round(pnorm(-0.05,mean_pessimistic_prior,sd_pessimistic_prior,2))),
"Pr(< -0.10)" = c(round(pnorm(-0.1,mean_skeptical_prior,sd_skeptical_prior),2),
round(pnorm(-0.1,mean_optimistic_prior,sd_optimistic_prior),2),
round(pnorm(-0.1,mean_pessimistic_prior,sd_pessimistic_prior),2))
)
priors %>%
kbl(align = 'c') %>%
add_header_above(c(" " = 4, "Probability of Treatment Effect" = 3)) %>%
kable_styling(bootstrap_options = "striped", full_width = F)| Prior Belief | Assumed Mean ARR | Belief Strength | Assumed SD of ARR | Pr(< 0) | Pr(< -0.05) | Pr(< -0.10) |
|---|---|---|---|---|---|---|
| Skeptical | 0.00 | Moderate | 0.05 | 0.50 | 0.16 | 0.02 |
| Optimistic | -0.05 | Moderate | 0.05 | 0.85 | 0.50 | 0.15 |
| Pessimistic | 0.05 | Weak | 0.10 | 0.30 | 0.00 | 0.06 |